﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class УправлениеПечатьюMSWordКлиент
	{
		//////////////////////////////////////////////////////////////////////////////////
		// СЕКЦИЯ ФУНКЦИОНАЛЬНОСТИ ДЛЯ РАБОТЫ С ШАБЛОНАМИ ОФИСНЫХ ДОКУМЕНТОВ
		// Описание структур данных:
		//
		// Handler - структура используемая для связи с COM объектами
		//  - COMСоединение - COMОбъект
		//  - Тип - строка - либо "DOC" либо "odt"
		//  - ИмяФайла - строка - имя файла шаблона (заполняется только для шаблона)
		//  - ТипПоследнегоВывода - тип последней выводимой области
		//  - (см. ТипОбласти)
		//
		// Область в документе
		//  - COMСоединение - COMОбъект
		//  - Тип - строка - либо "DOC" либо "odt"
		//  - Start - позиция начала области
		//  - End - позиция окончания области
		//
		////////////////////////////////////////////////////////////////////////////////
		// Экспортные функции
		// Создает COM соединение с COM объектом Word.Application, создает в нем
		// единственный документ.
		//

		public object ИнициализироватьПечатнуюФормуMSWord(/*НастройкиСтраницыМакета*/)
		{
			//Handler = Новый Структура("Тип", "DOC");
			//Handler.Вставить("COMСоединение", COMОбъект);
			if(true/*НастройкиСтраницыМакета <> Неопределено*/)
			{
			}
			return null;
		}
		// Создает COM соединение с COM объектом Word.Application и открывает
		// в нем макет. Файл макета сохраняется на основе двоичных данных
		// переданных в параметрах функции.
		//
		// Параметры:
		// ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета
		// Возвращаемое значение:
		// структура - ссылка макет
		//

		public object ПолучитьМакетMSWord(/*знач ДвоичныеДанныеМакета, знач ИмяВременногоФайла = ""*/)
		{
			//Handler = Новый Структура("Тип", "DOC");
			//ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC");
			//ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);
			//Handler.Вставить("COMСоединение", COMОбъект);
			//Handler.Вставить("ИмяФайла", ИмяВременногоФайла);
			//Handler.Вставить("ЭтоМакет", Истина);
			//Handler.Вставить("НастройкиСтраницыМакета", Новый Соответствие);
			return null;
		}
		// Закрывает соединение с COM объектом Word.Application
		// Параметры:
		// Handler - ссылка на печатную форму или макет
		// ЗакрытьПриложение - булево - требуется ли закрыть приложение
		//

		public void ЗакрытьСоединение(/*Handler, знач ЗакрытьПриложение*/)
		{
			if(true/*ЗакрытьПриложение*/)
			{
				//Handler.COMСоединение.Quit(0);
			}
			//Handler.COMСоединение = 0;
			if(true/*Handler.Свойство("ИмяФайла")*/)
			{
				//УдалитьФайлы(Handler.ИмяФайла);
			}
		}
		// Устанавливает свойство видимости у приложения MS Word
		// Handler - ссылка на печатную форму
		//

		public void ПоказатьДокументMSWord(/*знач Handler*/)
		{
			//COMСоединение = Handler.COMСоединение;
			//COMСоединение.Application.Visible = Истина;
			//COMСоединение.Activate();
		}
		////////////////////////////////////////////////////////////////////////////////
		// Функции для получения областей из макета
		// Получает область из макета.
		//
		// Параметры:
		//  Handler - ссылка на макет
		//  ИмяОбласти - имя области в макете
		//  СмещениеНачало    - Число - переопределяет границу начала области для случаев, когда область начинается не сразу за
		//                              операторной скобкой, а через один или несколько символов.
		//                              Значение по умолчанию: 1 - ожидается, что за операторной скобкой открытия области
		//                                                         следует символ перевода строки, который не нужно включать в
		//                                                         получаемую область.
		//  СмещениеОкончание - Число - переопределяет границу окончания области для случаев, когда область заканчивается не
		//                              перед операторной скобкой, а на один или несколько символов раньше. Значение должно
		//                              быть отрицательным.
		//                              Значение по умолчанию:-1 - ожидается, что перед операторной скобкой закрытия области
		//                                                         есть символ перевода строки, который не нужно включать в
		//                                                         получаемую область.
		//

		public object ПолучитьОбластьМакетаMSWord(/*знач Handler,
									знач ИмяОбласти,
									знач СмещениеНачало = 1,
									знач СмещениеОкончание = -1*/)
		{
			//Результат = Новый Структура("Document,Start,End");
			//ПозицияНачало = СмещениеНачало + ПолучитьПозициюНачалаОбласти(Handler.COMСоединение, ИмяОбласти);
			//ПозицияОкончание = СмещениеОкончание + ПолучитьПозициюОкончанияОбласти(Handler.COMСоединение, ИмяОбласти);
			if(true/*ПозицияНачало >= ПозицияОкончание или ПозицияНачало < 0*/)
			{
			}
			//Результат.Document = Handler.COMСоединение.ActiveDocument;
			//Результат.Start = ПозицияНачало;
			//Результат.End   = ПозицияОкончание;
			return null;
		}
		// Получает область верхнего колонтитула первой области макета
		// Параметры
		// Handler - ссылка на макет
		// Возвращаемое значение
		// ссылка на верхний колонтитул
		//

		public object ПолучитьОбластьВерхнегоКолонтитула(/*знач Handler*/)
		{
			return null;
		}
		// Получает область нижнего колонтитула первой области макета
		// Параметры
		// Handler - ссылка на макет
		// Возвращаемое значение
		// ссылка на нижний колонтитул
		//

		public object ПолучитьОбластьНижнегоКолонтитула(/*Handler*/)
		{
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// Функции для добавления областей к печатной форме
		// начало: функции работы с колонтитулами документа MS Word
		// Добавляет нижний колонтитул в печатную форму из макета.
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете
		// Параметры - список параметров для замены на значения
		// ДанныеОбъекта - данные объекта для заполнения
		//

		public void ДобавитьНижнийКолонтитул(/*знач ПечатнаяФорма,
									знач ОбластьHandler*/)
		{
			//ОбластьHandler.Footer.Range.Copy();
			//ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Footers.Item(1).Range.Paste();
		}
		// Добавляет верхний колонтитул в печатную форму из макета.
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете
		// Параметры - список параметров для замены на значения
		// ДанныеОбъекта - данные объекта для заполнения
		//

		public void ЗаполнитьПараметрыНижнегоКолонтитула(/*знач ПечатнаяФорма,
												знач ДанныеОбъекта = Неопределено*/)
		{
		}

		public object ВыполнитьЗаменуВНижнемКолонтитуле(/*COMСоединение, ТекстДляПоиска, ТекстЗамены*/)
		{
			//Range = COMСоединение.ActiveDocument.Sections(1).Footers.Item(1).Range;
			//Поиск = Range.Find;
			//Поиск.ClearFormatting();
			//Поиск.execute("{v8 " + ТекстДляПоиска + "}");
			if(true/*Поиск.Found*/)
			{
				//Range.Text = ТекстЗамены;
			}
			return null;
		}
		// Добавляет верхний колонтитул в печатную форму из макета.
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете
		// Параметры - список параметров для замены на значения
		// ДанныеОбъекта - данные объекта для заполнения
		//

		public void ДобавитьВерхнийКолонтитул(/*знач ПечатнаяФорма,
									знач ОбластьHandler*/)
		{
			//ОбластьHandler.Header.Range.Copy();
			//ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range.Paste();
		}
		// Добавляет верхний колонтитул в печатную форму из макета.
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете
		// Параметры - список параметров для замены на значения
		// ДанныеОбъекта - данные объекта для заполнения
		//

		public void ЗаполнитьПараметрыВерхнегоКолонтитула(/*знач ПечатнаяФорма,
												знач ДанныеОбъекта = Неопределено*/)
		{
		}

		public object ВыполнитьЗаменуВВерхнемКолонтитуле(/*COMСоединение, ТекстДляПоиска, ТекстЗамены*/)
		{
			//Range = COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range;
			//Поиск = Range.Find;
			//Поиск.ClearFormatting();
			//Поиск.execute("{v8 " + ТекстДляПоиска + "}");
			if(true/*Поиск.Found*/)
			{
				//Range.Text = ТекстЗамены;
			}
			return null;
		}
		// конец: функции работы с колонтитулами документа MS Word
		// Добавляет область в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при одиночном выводе области.
		//
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете.
		// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области
		//
		// Возвращаемое значение:
		// КоординатыОбласти
		//

		public object ПрисоединитьОбласть(/*знач ПечатнаяФорма,
							знач ОбластьHandler,
							знач ПереходНаСледСтроку = Истина,
							знач ПрисоединитьСтрокуТаблицы = Ложь*/)
		{
			//ОбластьHandler.Document.Range(ОбластьHandler.Start, ОбластьHandler.End).Copy();
			//ПФ_ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
			//ПозицияОкончанияДокумента	= ПФ_ActiveDocument.Range().End;
			//ОбластьВставки				= ПФ_ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1);
			if(true/*ПрисоединитьСтрокуТаблицы*/)
			{
				//ОбластьВставки.PasteAppendTable();
			}
			/*// возвращаем границы вставленной области
*/
			/*Результат = Новый Структура("Document, Start, End",
							ПФ_ActiveDocument,
							ПозицияОкончанияДокумента-1,
							ПФ_ActiveDocument.Range().End-1);*/
			if(true/*ПереходНаСледСтроку*/)
			{
				//ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
			}
			return null;
		}
		// Добавляет область списка в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при выводе данных списка (маркированного или нумерованного)
		//
		// Параметры
		// ОбластьПечатнойФормы - ссылка на область в печатной форме
		// ДанныеОбъекта - ДанныеОбъекта
		//

		public void ЗаполнитьПараметры(/*знач ОбластьПечатнойФормы,
							знач ДанныеОбъекта = Неопределено*/)
		{
		}

		public object ВыполнитьЗамену(/*знач ActiveDocument, ТекстДляПоиска, ТекстЗамены*/)
		{
			//Range = ActiveDocument.Content;
			//Поиск = Range.Find;
			//Поиск.ClearFormatting();
			//Поиск.execute("{v8 " + ТекстДляПоиска + "}");
			if(true/*Поиск.Found*/)
			{
				//Range.Text = Строка(ТекстЗамены);
			}
			return null;
		}
		// начало: работа с коллекциями
		// Добавляет область списка в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при выводе данных списка (маркированного или нумерованного)
		//
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете.
		// Параметры - строка, перечень параметров, которые требуется заменить
		// ДанныеОбъекта - ДанныеОбъекта
		// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области
		//

		public void ПрисоединитьИЗаполнитьНабор(/*знач ПечатнаяФорма,
									  знач ОбластьHandler,
									  знач ДанныеОбъекта = Неопределено,
									  знач ПереходНаСледСтроку = Истина*/)
		{
			//ОбластьHandler.Document.Range(ОбластьHandler.Start, ОбластьHandler.End).Copy();
			//ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
			if(true/*ПереходНаСледСтроку*/)
			{
				//ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
			}
		}
		// Добавляет область списка в печатную форму из макета, при этом заменяя
		// параметры в области значениями из данных объекта.
		// Применяется при выводе строки таблицы.
		//
		// Параметры
		// ПечатнаяФорма - ссылка на печатную форму
		// ОбластьHandler - ссылка на область в макете.
		// ИмяТаблицы - наименование таблицы (для доступа к данным)
		// ДанныеОбъекта - ДанныеОбъекта
		// ПереходНаСледСтроку - булево, требуется ли вставлять разрыв после вывода области
		//

		public void ПрисоединитьИЗаполнитьОбластьТаблицы(/*знач ПечатнаяФорма,
												знач ОбластьHandler,
												знач ДанныеОбъекта = Неопределено,
												знач ПереходНаСледСтроку = Истина*/)
		{
			if(true/*ДанныеОбъекта.Количество() = 0*/)
			{
			}
			//ПерваяСтрока = Истина;
			//ОбластьHandler.Document.Range(ОбластьHandler.Start, ОбластьHandler.End).Copy();
			//ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
			/*// вставляем первый строку, по которому далее будет выполняться
*/
			/*// вставка новых строк с форматированием по первой
*/
			//ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
			//ПозицияВставки = ActiveDocument.Range().End;
			//ОбластьВставки = ActiveDocument.Range(ПозицияВставки-1, ПозицияВставки-1);
			//ОбластьВставки.Paste();
			//ActiveDocument.Range(ПозицияВставки-2, ПозицияВставки-2).Delete();
			if(true/*ТипЗнч(ДанныеОбъекта[0]) = Тип("Структура")*/)
			{
			}
			if(true/*ПереходНаСледСтроку*/)
			{
				//ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
			}
		}
		// конец: работа с коллекциями
		// Вставляет разрыв на следующую строку
		// Параметры
		// Handler - ссылка на документ MS Word в который требуется вставить разрыв
		//

		public void ВставитьРазрывНаНовуюСтроку(/*знач Handler*/)
		{
			//ActiveDocument = Handler.COMСоединение.ActiveDocument;
			//ПозицияОкончанияДокумента = ActiveDocument.Range().End;
			//ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1).InsertParagraphAfter();
		}
		////////////////////////////////////////////////////////////////////////////////
		// Служебные не экспортные функции

		public object ПолучитьПозициюНачалаОбласти(/*знач COMСоединение, знач ИдентификаторОбласти*/)
		{
			//ИдентификаторОбласти = "{v8 Область." + ИдентификаторОбласти + "}";
			//ВесьДокумент = COMСоединение.ActiveDocument.Content;
			//ВесьДокумент.Select();
			//Поиск = COMСоединение.Selection.Find;
			//Поиск.Text = ИдентификаторОбласти;
			//Поиск.ClearFormatting();
			//Поиск.Forward = Истина;
			//Поиск.execute();
			if(true/*Поиск.Found*/)
			{
			}
			return null;
		}

		public object ПолучитьПозициюОкончанияОбласти(/*знач COMСоединение, знач ИдентификаторОбласти*/)
		{
			//ИдентификаторОбласти = "{/v8 Область." + ИдентификаторОбласти + "}";
			//ВесьДокумент = COMСоединение.ActiveDocument.Content;
			//ВесьДокумент.Select();
			//Поиск = COMСоединение.Selection.Find;
			//Поиск.Text = ИдентификаторОбласти;
			//Поиск.ClearFormatting();
			//Поиск.Forward = Истина;
			//Поиск.execute();
			if(true/*Поиск.Found*/)
			{
			}
			return null;
		}

		public object НастройкиПараметровСтраницы(/**/)
		{
			//МассивНастроек = Новый Массив;
			//МассивНастроек.Добавить("Orientation");
			//МассивНастроек.Добавить("TopMargin");
			//МассивНастроек.Добавить("BottomMargin");
			//МассивНастроек.Добавить("LeftMargin");
			//МассивНастроек.Добавить("RightMargin");
			//МассивНастроек.Добавить("Gutter");
			//МассивНастроек.Добавить("HeaderDistance");
			//МассивНастроек.Добавить("FooterDistance");
			//МассивНастроек.Добавить("PageWidth");
			//МассивНастроек.Добавить("PageHeight");
			//МассивНастроек.Добавить("FirstPageTray");
			//МассивНастроек.Добавить("OtherPagesTray");
			//МассивНастроек.Добавить("SectionStart");
			//МассивНастроек.Добавить("OddAndEvenPagesHeaderFooter");
			//МассивНастроек.Добавить("DifferentFirstPageHeaderFooter");
			//МассивНастроек.Добавить("VerticalAlignment");
			//МассивНастроек.Добавить("SuppressEndnotes");
			//МассивНастроек.Добавить("MirrorMargins");
			//МассивНастроек.Добавить("TwoPagesOnOne");
			//МассивНастроек.Добавить("BookFoldPrinting");
			//МассивНастроек.Добавить("BookFoldRevPrinting");
			//МассивНастроек.Добавить("BookFoldPrintingSheets");
			//МассивНастроек.Добавить("GutterPos");
			return null;
		}

		public object СобытиеЖурналаРегистрации(/**/)
		{
			//Возврат НСтр("ru = 'Печать'");
			return null;
		}

		public void НеУдалосьСформироватьПечатнуюФорму(/*ИнформацияОбОшибке*/)
		{
			//ТекстУточнения = НСтр("ru = 'При работе через веб требуется браузер Internet Explorer под управлением операционной системы Windows. См. также главу документации ""Настройка веб-браузеров для работы в веб-клиенте""'");
			//ТекстУточнения = "";
			/*ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'Не удалось сформировать печатную форму: %1. 
			|Для вывода печатных форм в формате Microsoft Word требуется, чтобы на компьютере был установлен пакет Microsoft Office. %2'"),
		КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ТекстУточнения);*/
			//ВызватьИсключение ТекстИсключения;
		}
	}
}
